Semiconductor devices are vastly complex structures. Various semiconductors, including application specific integrated circuits (ASICs), are designed with a certain purpose in mind. As a downside of the specific design parameters of an ASIC, the circuit can no longer be altered after it leaves the production line. For this reason, ASIC designers need to be sure of their chosen design, especially when producing large quantities of the same ASIC. In contrast, a programmable logic device such as a field programmable gate array (FPGA) is a type of semiconductor that does not have specific programming built into the design during production. Programmable logic devices can often be reprogrammed while remaining in their environment of use (e.g. while mounted on the circuit board within which the device is intended to function). Programmable logic devices typically include logic blocks (e.g. programmable Boolean logic gates) and can also include programmable memory blocks, programmable clocking blocks, and other specialized programmable blocks such as multiplier blocks and I/O ports.
Typically, programmable logic devices are programmed using a programming language that implements specific, desired logic in the programmable logic devices. The programmable logic devices can be programmed by writing data to storage on the programmable logic devices. A programmable logic device's architecture includes a programmable routing structure and an array of configurable logic blocks. The programmable routing matrix includes the ability to connect multiple configurable logic blocks to each other.
Programmable logic devices allow for adaptability to future (unforeseen) changes in functional requirements. In some cases, programmable logic devices are used as prototypes for ASIC or other devices. Using a programmable logic device to prototype an ASIC for verification and initial software development is a useful way to both decrease development time and reduce the risk of first silicon failure for the ASIC. Programmable logic devices function well in many applications such as digital video, graphics processing, communications, encryption, medical equipment, mobile computing, and instrumentation, areas all of which are continuing to play an important role in the implementation of many new programmable logic designs.